#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <arpa/inet.h>

#define MAX_BUFFER_SIZE 256
#define GATEWAY_IP "192.168.1.1"
#define PING_COUNT 2
#define MAX_ATTEMPTS 5  // 最多重试 3 次（即最多 ping 3 次）

void ensure_userfs_dir() {
    struct stat st = {0};
    if (stat("/userfs", &st) == -1) {
        mkdir("/userfs", 0755);
    }
}

int main() {
    ensure_userfs_dir();
    const char *iface = "eth0";

    printf("%s 网口测试开始...\n", iface);

    // 可选：简单检查 carrier（不循环等待，由上位机保证已插线）
    FILE *file = fopen("/sys/class/net/eth0/carrier", "r");
    if (file) {
        char buf[16];
        if (fgets(buf, sizeof(buf), file) && strcmp(buf, "1\n") == 0) {
            printf("检测到 %s 网线已连接\n", iface);
        }
        fclose(file);
    }

    printf("正在 ping 网关: %s\n", GATEWAY_IP);

    char ping_cmd[MAX_BUFFER_SIZE];
    // snprintf(ping_cmd, sizeof(ping_cmd), "ping -c %d -W 1 %s", PING_COUNT, GATEWAY_IP);
    snprintf(ping_cmd, sizeof(ping_cmd), "ping -I %s -c %d -W 1 %s", iface, PING_COUNT, GATEWAY_IP);

    int result = -1;
    int attempt = 0;

    while (attempt < MAX_ATTEMPTS) {
        printf("第 %d 次尝试 ping...\n", attempt + 1);
        result = system(ping_cmd);
        if (result == 0) {
            break; // 成功，跳出循环
        }
        attempt++;
        if (attempt < MAX_ATTEMPTS) {
            sleep(2); // 失败后等待 2 秒再重试
        }
    }

    if (result == 0) {
        printf("网口5测试成功\n");
        system("echo \"$(date)：网口5测试成功\" >> /userfs/all.txt");
    } else {
        printf("网口5测试失败\n");
        system("echo \"$(date)：网口5测试失败\" >> /userfs/all.txt");
    }

    return 0;
}